package com.example.product.controller;

import com.alibaba.fastjson.JSONObject;
import com.example.bean.Product;
import com.example.product.service.ProductService;
import com.example.shoputils.constants.HttpCode;
import com.example.shoputils.resp.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author 刘武贵
 * @Date 2024/2/28 0:46
 * @Description 功能描述：商品控制器
 * 在ProductController类中，提供了一个获取商品信息的接口和扣减商品库存的接口，
 * 用户调用订单微服务的提交订单接口下单时，订单微服务会调用商品微服务的接口获取商品的基本信息并扣减商品的库存
 */
@RestController
@Slf4j
public class ProductController {

    /**
     * 商品Service接口
     */
    @Autowired
    private ProductService productService;

    /**
     * 根据商品ID获取商品信息
     * @param pid 商品ID
     * @return 商品信息
     */
    @GetMapping(value = "/get/{pid}")
    public Product getProduct(@PathVariable("pid") Long pid){
        // 调用服务层方法获取商品信息
        Product product = productService.getProductById(pid);
        // 输出获取到的商品信息
        log.info("获取到的商品信息为：{}", JSONObject.toJSONString(product));
        // 返回商品信息
        return product;
    }

    /**
     * 更新商品库存
     * @param pid 商品id
     * @param count 购买数量
     * @return 更新结果
     */
    @GetMapping(value = "/update_count/{pid}/{count}")
    public Result<Integer> updateCount(@PathVariable("pid") Long pid, @PathVariable("count") Integer count){
        log.info("更新商品库存传递的参数为: 商品id:{}, 购买数量:{} ", pid, count);
        // 调用服务层方法更新商品库存
        int updateCount = productService.updateProductStockById(count, pid);
        // 构造返回结果
        Result<Integer> result = new Result<>(HttpCode.SUCCESS, "执行成功", updateCount);
        return result;
    }
}
